/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package view;

import java.util.ArrayList;
import model.dao.AtividadeDao;
import model.dao.FaltaDao;
import model.dao.NotaDao;
import model.dao.ProfessorDao;
import model.dao.TurmaDao;
import model.dominio.Aluno;
import model.dominio.Atividade;
import model.dominio.Falta;
import model.dominio.Nota;
import model.dominio.Professor;
import model.dominio.Turma;

/**
 *
 * @author
 */
public class ProfessorView {

    public void menu() {
        System.out.println("=======Professors=======");
        System.out.println("1 - Registrar Professor");
        System.out.println("2 - Lançar Faltas");
        System.out.println("3 - Lançar Notas");
        System.out.println("4 - Histórico de Disciplinas Lecionadas");
        System.out.println("0 - Sair");
        int op = 0;

        op = Console.readInteger();
        switch (op) {
            case 1:
                cadastro();
                break;
            case 2:
                lancarFaltas();
                break;
            case 3:
                lancarNotas();
                break;
            case 4:
                historico();
                break;
            case 0:
                //não faz nada, só volta ao menu acima.
                break;
            default:
                System.out.println("Opção inválida");
                this.menu();
        }
    }

    public void cadastro() {
        System.out.println("Digite o nome do professor");
        String nome = Console.readString();
        System.out.println("Digite o cpf do professor");
        String cpf = Console.readString();
        System.out.println("Digite o depertamento do professor");
        String departamento = Console.readString();
        Professor professor = new Professor();
        professor.setNome(nome);
        professor.setCpf(cpf);
        professor.setDepartamento(departamento);
        if (new ProfessorDao().registrar(professor)) {
            System.out.println("Professor registrado!");
        }

    }

    public void lancarFaltas() {
        System.out.println("Escolha o professor:");
        ArrayList<Professor> professores = new ProfessorDao().buscarVarios();
        for (int i = 0; i < professores.size(); i++) {
            System.out.println(professores.get(i).getCodigoProfessor() + " - " + professores.get(i).getNome() + " - " + professores.get(i).getDepartamento());
        }

        int codigoProfessor = Console.readInteger();
        System.out.println("Escolha a turma:");
        ArrayList<Turma> turmas = new TurmaDao().buscarVarias();
        for (int i = 0; i < turmas.size(); i++) {
            if (codigoProfessor == turmas.get(i).getProfessor().getCodigoProfessor()) {
                System.out.println(turmas.get(i).getCodigoTurma() + " - " + turmas.get(i).getDisciplina().getNome() + " - Professor " + turmas.get(i).getProfessor().getNome());
            }
        }
        int codTurma = Console.readInteger();

        Turma turma = new TurmaDao().buscar(codTurma);
        ArrayList<Aluno> alunos = turma.getAlunos();
        int faltas;
        FaltaDao dao = new FaltaDao();
        Falta falta = new Falta();
        System.out.println("Digite as faltas dos alunos");
        for (int i = 0; i < alunos.size(); i++) {
            System.out.print(alunos.get(i).getNome() + ": ");
            faltas = Console.readInteger();
            falta.setAluno(alunos.get(i));
            falta.setTurma(turma);
            falta.setFaltas(faltas);
            dao.registrar(falta);
        }
        System.out.println("Faltas Registradas com sucesso");
    }

    public void lancarNotas() {
        System.out.println("Escolha o professor:");
        ArrayList<Professor> professores = new ProfessorDao().buscarVarios();
        for (int i = 0; i < professores.size(); i++) {
            System.out.println(professores.get(i).getCodigoProfessor() + " - " + professores.get(i).getNome() + " - " + professores.get(i).getDepartamento());
        }

        int codigoProfessor = Console.readInteger();
        System.out.println("Escolha a turma:");
        ArrayList<Turma> turmas = new TurmaDao().buscarVarias();
        for (int i = 0; i < turmas.size(); i++) {
            if (codigoProfessor == turmas.get(i).getProfessor().getCodigoProfessor()) {
                System.out.println(turmas.get(i).getCodigoTurma() + " - " + turmas.get(i).getDisciplina().getNome() + " - Professor " + turmas.get(i).getProfessor().getNome());
            }
        }
        int codTurma = Console.readInteger();
        Turma turma = new TurmaDao().buscar(codTurma);


        ArrayList<Atividade> atividades = new AtividadeDao().buscarVarias();
        int cont = 0;
        for (int i = 0; i < atividades.size(); i++) {
            if (codTurma == atividades.get(i).getTurma().getCodigoTurma()) {
                System.out.println((i + 1) + " - " + atividades.get(i).getNome());
                cont++;
            }
        }
        if (cont == 0) {
            System.out.println("Nenhuma atividade cadastrada para a turma selecionada");
            menu();
        }
        Atividade atividade = null;
        try {
            atividade = atividades.get(Console.readInteger() - 1);
        } catch (Exception e) {
            System.out.println("Codigo Inválido, tente novamente.");
            lancarNotas();
        }
        ArrayList<Aluno> alunos = turma.getAlunos();
        NotaDao dao = new NotaDao();
        Nota nota = new Nota();
        float vNota;
        System.out.println("Digite as notas dos alunos nessa atividade (Entre 0 e " + atividade.getValor() + ")");
        for (int i = 0; i < alunos.size(); i++) {
            System.out.print(alunos.get(i).getNome() + ": ");
            do {
                vNota = Console.readFloat();
                if (vNota > atividade.getValor() || vNota < 0) {
                    System.out.print("Nota inválida, digite novamente:");
                }
            } while (vNota > atividade.getValor() || vNota < 0);
            nota.setAluno(alunos.get(i));
            nota.setAtividade(atividade);
            nota.setNota(vNota);
            dao.registrar(nota);
        }
        System.out.println("Notas Registradas com sucesso");
    }

    public void historico() {
        System.out.println("Escolha o professor");
        ArrayList<Professor> professores = new ProfessorDao().buscarVarios();
        for (int i = 0; i < professores.size(); i++) {
            System.out.println(professores.get(i).getCodigoProfessor() + " - " + professores.get(i).getNome());
        }
        int codProf= Console.readInteger();
        ArrayList<Turma> turmas = new TurmaDao().buscarVarias();
        int total = 0;
        for (Turma turma : turmas) {
            if (turma.getProfessor().getCodigoProfessor() == codProf) {
                System.out.println("Ano: " + turma.getAno() + ", Período: " + turma.getPeriodo() + "º, Disciplina: " + turma.getDisciplina().getNome());
                total++;
            }
        }
        
        if (total == 0) {
            System.out.println("O professor ainda não lecionou nenhuma disciplina.");
        } else {
            System.out.println("Total: " + total);
        }
    }
}
